package com.silence.springboot.dao;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.silence.springboot.entity.RoleEntity;
import com.silence.springboot.mapper.RoleMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;

import java.util.List;

import static com.silence.springboot.entity.table.RoleEntityTableDef.ROLE_ENTITY;

/**
 * 角色表 数据访问层接口实现类。
 */
@Slf4j
@Repository
@RequiredArgsConstructor
public class RoleDao {

    /**
     * 角色表 Mapper 接口
     */
    private final RoleMapper roleMapper;

    /**
     * 查询权限表
     *
     * @return 权限表
     */
    public List<RoleEntity> selectAllRole() {
        return roleMapper.selectAll();
    }

    /**
     * 分页查询权限表
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 分页查询权限表出参
     */
    public Page<RoleEntity> pageRoles(Integer pageNum, Integer pageSize, RoleEntity convertEntity) {
        return roleMapper.paginate(pageNum, pageSize, QueryWrapper.create()
                .select()
                .from(ROLE_ENTITY)
                .where(ROLE_ENTITY.ROLE_NAME.like(convertEntity.getRoleName(), StringUtils::isNotBlank))
                .where(ROLE_ENTITY.ROLE_CODE.like(convertEntity.getRoleCode(), StringUtils::isNotBlank))
        );
    }

    /**
     * 新增权限表
     *
     * @param roleEntity 新增权限表入参
     */
    public void addRole(RoleEntity roleEntity) {
        roleMapper.insertSelective(roleEntity);
    }

    /**
     * 判断角色编码是否存在
     *
     * @param roleCode 角色编码
     * @return 是否存在
     */
    public boolean existRoleCode(String roleCode) {
        return roleMapper.selectCountByQuery(QueryWrapper.create()
                .select()
                .from(ROLE_ENTITY)
                .where(ROLE_ENTITY.ROLE_CODE.eq(roleCode))) > 0;
    }

    /**
     * 更新权限表
     *
     * @param roleEntity 更新权限表入参
     */
    public void updateRole(RoleEntity roleEntity) {
        roleMapper.update(roleEntity);
    }

    /**
     * 根据id删除权限表
     *
     * @param id 权限表主键
     */
    public void deleteById(String id) {
        roleMapper.deleteById(id);
    }

    /**
     * 根据ids批量删除权限表
     *
     * @param ids 权限表主键列表
     */
    public void deleteBatchByIds(List<String> ids) {
        roleMapper.deleteBatchByIds(ids);
    }
}
